﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using CRUD.InterfaceDAO;
using GestionadorBaseDatos;

namespace CapaNegocios
{
    /// <summary>
    /// Interface que define los metodos de comportamiento de la gestion de las apuestas
    /// </summary>
    public interface IGestionApuesta
    {
        /// <summary>
        /// Obtiene todas las apuestas
        /// </summary>
        /// <returns></returns>
        IList GetAll();

        /// <summary>
        /// obtiene apeustas dado un evento
        /// </summary>
        /// <param name="idevento"></param>
        /// <returns></returns>
        IList GetByEvento(Evento idevento);

        /// <summary>
        /// obtieneapuestas dado un pago
        /// </summary>
        /// <param name="idPago"></param>
        /// <returns></returns>
        IList GetByPago(Pago idPago);

        /// <summary>
        /// inserta una nueva apuesta
        /// </summary>
        /// <param name="apuesta"></param>
        void Insert(Apuesta apuesta);
       
        /// <summary>
        /// obtiene una apuesta dado nickname del usuario
        /// </summary>
        /// <param name="nickname"></param>
        /// <returns></returns>
        IList GetById(string nickname);

        /// <summary>
        /// procedimiento para enviar correo con la factura de la apuesta
        /// </summary>
        /// <param name="usuario"></param>
        /// <param name="apuesta"></param>
        /// <param name="evento"></param>
        /// <param name="participante"></param>
        /// <param name="proporcion"></param>
        void EnviarCorreoConFactura(Usuario usuario, Apuesta apuesta, Evento evento, Participante participante, Proporcion proporcion);

        /// <summary>
        /// obtiene el participante de una apuesta
        /// </summary>
        /// <param name="part"></param>
        /// <returns></returns>
        Participante getParticipanteId(Participante part);

        /// <summary>
        /// obtiene la forma de pago de una apuesta
        /// </summary>
        /// <param name="part"></param>
        /// <returns></returns>
        FormaPago getFormaPagoId(FormaPago part);

        /// <summary>
        /// obtiene la forma de pago dado el nombre de la misma
        /// </summary>
        /// <param name="part"></param>
        /// <returns></returns>
        FormaPago getFormaPagoNombre(FormaPago part);

        /// <summary>
        /// lista de apuestas ganadas de un usuario
        /// </summary>
        /// <param name="nickname"></param>
        /// <returns></returns>
        IList getGanancias(string nickname);

        /// <summary>
        /// updatea el status de un evento
        /// </summary>
        /// <param name="even"></param>
        void UpdateEvento(Evento even);
    }
}
